// 示例 1：

// 输入：nums = [-1,0,1,2,-1,-4]
// 输出：[[-1,-1,2],[-1,0,1]]
// 解释：
// nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
// nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
// nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
// 不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
// 注意，输出的顺序和三元组的顺序并不重要。
// 示例 2：

// 输入：nums = [0,1,1]
// 输出：[]
// 解释：唯一可能的三元组和不为 0 。
// 示例 3：

// 输入：nums = [0,0,0]
// 输出：[[0,0,0]]
// 解释：唯一可能的三元组和为 0 。

nums = [-1, 0, 1, 2, -1, -4] // -4,-1,-1,0,1,2

// var threeSum = function (nums) {
//     nums.sort((a, b) => a - b)
//     let len = nums.length
//     let result = []
//     if (nums[0] > 0) return result;

//     for (let i = 0; i < len; i++) {
//         if (i > 0 && nums[i] === nums[i - 1]) {
//             continue;
//         }
//         let left = i + 1, right = len - 1
//         while (left < right) {
//             let sum = nums[i] + nums[left] + nums[right]
//             if (sum > 0) {
//                 right--
//             } else if (sum < 0) {
//                 left++
//             } else {
//                 result.push([nums[i], nums[left], nums[right]])
//                 left++
//                 right--
//                 while (left < right && nums[left] === nums[left - 1]) left++
//                 while (left < right && nums[right] === nums[right + 1]) right--
//             }
//         }
//     }
//     return result;
// }

var threeSum = function (nums) {
    let res = [];
    nums.sort((a, b) => a - b);
    if (nums[0] > 0) return res;
    for (let i = 0; i < nums.length; i++) {
        let cur = nums[i];
        if (i > 0 && cur === nums[i - 1]) {
            continue;
        }
        let left = i + 1; right = nums.length - 1;
        while (left < right) {
            let sum = cur + nums[left] + nums[right]
            if (sum > 0) {
                right--
            } else if (sum < 0) {
                left++
            } else {
                res.push([cur, nums[left], nums[right]])
                left++;
                right--;
                while (left < right && nums[left] === nums[left - 1]) {
                    left++;
                }
                while (left < right && nums[right] === nums[right + 1]) {
                    right--;
                }
            }
        }
    }
    return res;
}

console.log(threeSum(nums));
